import { apiClient } from './api-client';
import { LoginRequest, LoginResponse, BaseResponse } from '../types/api.types';

export class AuthService {
  private static readonly BASE_URL = '/auth';

  /**
   * 用户登录
   * @param credentials 登录凭证
   * @returns 登录响应
   */
  static async login(credentials: LoginRequest): Promise<BaseResponse<LoginResponse>> {
    try {
      const response = await apiClient.post<LoginResponse>(
        `${this.BASE_URL}/login`,
        credentials
      );
      
      // 登录成功后设置token
      if (response.code === 200 && response.data) {
        // 这里可以根据实际需要存储token
        // localStorage.setItem('token', response.data.token);
        console.log('登录成功，用户信息:', response.data);
      }
      
      return response;
    } catch (error) {
      console.error('登录失败:', error);
      throw error;
    }
  }

  /**
   * 用户登出
   * @returns 登出结果
   */
  static async logout(): Promise<BaseResponse<string>> {
    try {
      // 清除本地存储的token
      // localStorage.removeItem('token');
      // sessionStorage.removeItem('token');
      
      // 调用登出接口（如果有的话）
      // const response = await apiClient.post(`${this.BASE_URL}/logout`);
      
      console.log('用户已登出');
      return {
        code: 200,
        message: '登出成功',
        data: 'success',
        timestamp: Date.now()
      };
    } catch (error) {
      console.error('登出失败:', error);
      throw error;
    }
  }

  /**
   * 刷新token
   * @returns 新的token
   */
  static async refreshToken(): Promise<BaseResponse<{ token: string }>> {
    try {
      // 这里实现token刷新逻辑
      // const response = await apiClient.post(`${this.BASE_URL}/refresh`);
      
      console.log('Token已刷新');
      return {
        code: 200,
        message: 'Token刷新成功',
        data: { token: 'new-token' },
        timestamp: Date.now()
      };
    } catch (error) {
      console.error('Token刷新失败:', error);
      throw error;
    }
  }

  /**
   * 检查登录状态
   * @returns 是否已登录
   */
  static checkLoginStatus(): boolean {
    // 检查本地是否有有效的token
    // const token = localStorage.getItem('token') || sessionStorage.getItem('token');
    // return !!token && !this.isTokenExpired(token);
    
    // 简化实现，实际项目中需要更完善的检查
    return true;
  }

  /**
   * 获取当前用户信息
   * @returns 用户信息
   */
  static getCurrentUser(): LoginResponse | null {
    // 从本地存储获取用户信息
    // const userStr = localStorage.getItem('user');
    // return userStr ? JSON.parse(userStr) : null;
    
    // 简化实现
    return null;
  }

  /**
   * 设置认证token
   * @param token 认证token
   */
  static setAuthToken(token: string): void {
    apiClient.setAuthToken(token);
    // localStorage.setItem('token', token);
  }

  /**
   * 清除认证信息
   */
  static clearAuth(): void {
    apiClient.setAuthToken('');
    // localStorage.removeItem('token');
    // localStorage.removeItem('user');
    // sessionStorage.removeItem('token');
    // sessionStorage.removeItem('user');
  }
}

export default AuthService;